package com.hmall.cart.domain.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 购物车实体类 --- 对应数据库表 cart
 * 存储用户购物车中的商品信息，包含商品详情、数量和用户关联等字段
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("cart")
public class Cart implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 购物车条目ID（主键，自增）
     * 唯一标识购物车中的一个商品条目
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户ID
     * 关联用户表，标识该购物车条目属于哪个用户
     */
    private Long userId;

    /**
     * SKU商品ID
     * 关联商品表，标识购物车中的具体商品
     */
    private Long itemId;

    /**
     * 购买数量
     * 用户选择的商品购买数量，必须大于0
     */
    private Integer num;

    /**
     * 商品标题
     * 冗余存储的商品名称，避免每次查询都调用商品服务
     */
    private String name;

    /**
     * 商品动态属性键值集
     * JSON格式字符串，存储用户选择的商品规格（如颜色、尺寸等）
     * 示例：{"颜色":"黑色","尺寸":"16GB+512GB"}
     */
    private String spec;

    /**
     * 商品价格（单位：分）
     * 添加购物车时的商品价格，固定存储以避免后续价格变动影响结算
     */
    private Integer price;

    /**
     * 商品图片
     * 冗余存储的商品主图URL，用于快速展示购物车列表
     */
    private String image;

    /**
     * 创建时间
     * 记录购物车条目创建的时间戳
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     * 记录购物车条目最后更新的时间戳（如修改数量）
     */
    private LocalDateTime updateTime;

}
